/*----------------------------------------------------------------------------------------
*
*  Copyright 2019, Gao Hai Hui, <fromzeropoint@126.com>.  All rights reserved.
*  https://gitee.com/helloworldghh/xoskit.git
*  Use of this source code is governed by a MIT license
*  that can be found in the License file.
*
----------------------------------------------------------------------------------------*/
#ifndef __XOS_STL_POOL_XOS_ITEM_DATA_H__
#define __XOS_STL_POOL_XOS_ITEM_DATA_H__

#include <string>
#include <list>
#include <map>

namespace xos_stl
{

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// 
    // xos_item_data，放在每个从mem_item继承下来的用户类cpp中，静态变量
	// 

    template< class T >
    class xos_item_data
    {
    public:
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        // 
        xos_item_data() : container_ptr(0), pool_ptr(0), list_ptr(0)
		{
		}
        ~xos_item_data()
		{
		}
    public:
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        // 
        xos_container::i_container* container_ptr;
        typename T::POOL* pool_ptr;
        typename T::LIST* list_ptr;
    public:
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        // 
        int set_container( xos_container::i_container* pContainer )
        {
            int ret = 0;
            if( !container_ptr )
            {
                container_ptr = pContainer;
            }
            return ret;
        }
        int init()
        {
            int ret = 0;
            {
                init_obj( pool_ptr );
                pool_ptr->init( container_ptr );
            }
            init_list( list_ptr );
            return ret;
        }
        int term()
        {
            int ret = 0;
            term_list( list_ptr );
            term_item( pool_ptr );
            return ret;
        }
    public:
    };

} // xos_stl

#endif // __XOS_STL_POOL_XOS_ITEM_DATA_H__
